package com.mojo.junit4;

import org.junit.*;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * 整合JUnit4
 * <p>
 * 1、引入依赖spring-test,junit
 * 2、测试类使用@runwith注解，指定SpringJUnit4ClassRunner
 * 3、@ContextConfiguration注解加载配置文件
 * 4、测试
 * Runwith就是放在测试类名之前，用来确定这个类怎么运行的。也可以不标注，会使用默认运行器。常见的运行器有：
 * RunWith(Parameterized.class) 参数化运行器，配合@Parameters使用junit的参数化功能
 * RunWith(Suite.class) @SuiteClasses({ATest.class,BTest.class,CTest.class})测试集运行器配合使用测试集功能
 * RunWith(JUnit4.class) junit4的默认运行器
 * RunWith(JUnit38ClassRunner.class) 用于兼容junit3.8的运行器
 * 一些其它运行器具备更多功能。例如@RunWith(SpringJUnit4ClassRunner.class)集成了spring的一些功能
 * </p>
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext.xml")
@FixMethodOrder(MethodSorters.JVM)
public class HelloTestJunit4 {
    @Autowired
    private UserService userService;

    @Before
    @Ignore//禁用测试,和@before一起时失效
    public void before() {
        System.out.println(">>>before test");
    }

    //expected,期望产生什么异常
    //timeout,执行时间是否超时
    @Test(expected = NullPointerException.class, timeout = 200L)
    //@Ignore//禁用测试
    public void test1() {
        System.out.println(">>test1");
        //Assert.assertEquals("12",new String("12"));
        Integer i = null;
        i.toString();
    }
    @Test
    public void testA() {
        userService.printUser();
        System.out.println(">>testA");
        //Assert.assertEquals("12",new String("12"));
    }

    @After
    public void afterTest() {
        System.out.println(">>>after test");
    }
}